/**
	How to Include:

	//HeaderFile
	//include DataManager in CPP FILE
	class DataManager;		//Forward Declaration is neccessary that classes can not link against each other and that link throws no errors
	class SomeClass
	{	
		SomeClass();
		~SomeClass();
		DataManager*	dataManager;
	};

	//-------------------------------------------------------------------------------------

	//CPP File
	#include "Manager/DataManager/DataManager.h"					//!!!Important!!! - must be in CPP

	SomeClass()
	{
		dataManager = DataManager::getDataManagerAsSingleton();
	}
*/

#ifndef _DATA_MANAGER_H_
#define _DATA_MANAGER_H_

#include "Ogre.h"
#include "Constants.h"

#include <OISEvents.h>
#include <OISInputManager.h>
#include <OISKeyboard.h>
#include <OISMouse.h>
#include <SdkTrays.h>

class DataManager
{	

public:	
	static DataManager*			getDataManagerAsSingleton();													//returns a pointer to a DataManager. DataManager is implemented as Singleton
	void						initializeDataManager(Ogre::SceneManager* sceneManager, Ogre::Camera* freeLookCamera, Ogre::Viewport* mainViewport, Ogre::RenderWindow* window, OgreBites::SdkTrayManager* sdkTrayManager);		//necessary to set sceneManager and freelookCamera
	
	Ogre::SceneManager*			getSceneManager();																//returns sceneManager if available, otherwise return 0-Pointer and write error to console
	Ogre::Camera*				getFreeLookCamera();															//returns freeLookCamera if available, otherwise return 0-Pointer and write error to console
	Ogre::Viewport*				getMainViewport();
	Ogre::RenderWindow*			getMainWindow();
	OgreBites::SdkTrayManager*	getSdkTrayManager();
	
	void						setSceneManager(Ogre::SceneManager* sceneManager);									//set sceneManager manually
	void						setFreeLookCamera(Ogre::Camera* freeLookCamera);										//set freeLookCamera manually
	void						setMainViewport(Ogre::Viewport* mainViewport);
	void						setSdkTrayManager(OgreBites::SdkTrayManager* sdkTrayManager);


private:
	DataManager(); 
	~DataManager();
	static DataManager*			_instance;
	
	Ogre::SceneManager*			sceneManager;
	Ogre::Camera*				freeLookCamera;	
	Ogre::Viewport*				mainViewport;
	Ogre::RenderWindow*			window;
	OgreBites::SdkTrayManager*	sdkTrayManager;
};
#endif